import request from '@/utils/request'

// 获取组态图列表
export function getList(params = { curPage: 1, pageSize: 10, name: '' }) {
    return request({
        url: '/intra/iot/devicetopologypoint/browse',
        method: 'get',
        params: {
            curPage: params.curPage || 1,
            pageSize: params.pageSize || 10,
            ...(params.name ? { name: params.name } : {})
        }
    }).then(res => {
        // 转换返回数据格式，从新格式转为旧格式以兼容现有代码
        if (res.code === 200 && res.data) {
            // 获取分页数据列表
            const list = res.data.list || res.data.records || res.data || []
            // 转换字段名（从 tname -> t_name 等）
            const transformedList = list.map(item => ({
                t_id: item.id || item.tid,
                t_name: item.tname || item.t_name,
                t_topic: item.ttopic || item.t_topic,
                t_width: item.twidth || item.t_width,
                t_height: item.theight || item.t_height,
                t_background_color: item.tbackgroundColor || item.t_background_color,
                t_jsondata: item.tjsondata || item.t_jsondata,
                createAt: item.createAt,
                updateAt: item.updateAt,
                status: item.status
            }))
            return {
                ...res,
                data: transformedList
            }
        }
        return res
    })
}

//获取单个组态图
export function getTopoById(tId, token = '') {
    const headers = {}
    if (token) {
        headers.Authorization = 'Bearer ' + token
    }
    
    return request({
        url: `/intra/iot/devicetopologypoint/detail/${tId}`,
        method: 'get',
        headers
    }).then(res => {
        // 转换返回数据格式，从新格式转为旧格式以兼容现有代码
        if (res.code === 200 && res.data) {
            const data = res.data
            // 转换字段名（从 tname -> t_name 等）
            const transformedData = {
                t_id: data.id || data.tid,
                t_name: data.tname || data.t_name,
                t_topic: data.ttopic || data.t_topic,
                t_width: data.twidth || data.t_width,
                t_height: data.theight || data.t_height,
                t_background_color: data.tbackgroundColor || data.t_background_color,
                t_jsondata: data.tjsondata || data.t_jsondata,
                createAt: data.createAt,
                updateAt: data.updateAt,
                status: data.status
            }
            return {
                ...res,
                data: [transformedData] // 保持数组格式以兼容现有代码
            }
        }
        return res
    })
}

//删除单个组态图
export function delTopo(tId) {
    return request({
        url: `/intra/iot/devicetopologypoint/delete`,
        method: 'delete',
        data: [tId]
    })
}

//保存组态图
export function saveTopo(data) {
    // 转换参数格式：从旧格式转为新格式
    const newData = {
        tname: data.tName,
        ttopic: data.tTopic,
        twidth: data.tWidth.toString(),
        theight: data.tHeight.toString(),
        tbackgroundColor: data.tBackgroundColor,
        tjsondata: data.tJsondata,
        status: 0
    }
    
    // 只有修改时才传 id，新增时不传 id 字段（直接从对象中排除）
    if (data.tId && String(data.tId).trim() !== "") {
        newData.id = parseInt(data.tId)
    }
    
    return request({
        url: `/intra/iot/devicetopologypoint/submit`,
        method: 'post',
        data: newData
    })
}
// 点位初始化（新接口）
// POST /intra/iot/devicetopologypoint/browsePointData
// 入参：直接传字符串数组，例如：["dev1@p1","dev2@p2"]
export function getPointDefalut(data, token = '') {
    const body = Array.isArray(data) ? data : (data?.nodeKeyList || [])
    const config = {
        url: `/intra/iot/devicetopologypoint/browsePointData`,
        method: 'post',
        data: body
    }
    if (token) {
        config.headers = { Authorization: 'Bearer ' + token }
    }
    return request(config)
}

// 获取设备列表
export function getDeviceList(params = { pageNum: 1, pageSize: 1000 }) {
    return request({
        url: '/intra/iot/device/browse',
        method: 'get',
        params
    })
}

// 获取设备属性
export function getDeviceRealtimeData(params) {
    return request({
        url: '/intra/stat/realtime/device',
        method: 'get',
        params
    })
}